function validateIdCard(idCard) {
    idCard = idCard + ''
    // 基本格式校验
    if (typeof idCard !== 'string' || idCard.length !== 18) {
        return false;
    }

    // 正则表达式验证前17位为数字，最后一位为数字或X/x
    if (!/^\d{17}[\dXx]$/.test(idCard)) {
        return false;
    }

    // 提取身份证各部分信息
    const regionCode = idCard.substring(0, 6);      // 地区码
    const birthDate = idCard.substring(6, 14);      // 出生年月日
    const sequenceCode = idCard.substring(14, 17);  // 顺序码
    const checkCode = idCard.charAt(17).toUpperCase(); // 校验码（转大写）

    // 校验地区码（6位数字）
    if (!/^\d{6}$/.test(regionCode)) {
        return false;
    }

    // 校验出生日期
    const year = parseInt(birthDate.substring(0, 4)),
            month = parseInt(birthDate.substring(4, 6)) - 1, // 月份从0开始
            day = parseInt(birthDate.substring(6, 8));

    const date = new Date(year, month, day);

    // 验证日期有效性
    if (date.getFullYear() !== year || date.getMonth() !== month || date.getDate() !== day) {
        return false;
    }

    // 校验码计算
    const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    const checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];

    let sum = 0;
    for (let i = 0; i < 17; i++) {
        sum += parseInt(idCard[i]) * weights[i];
    }

    const calculatedCode = checkCodes[sum % 11];

    // 返回最终校验结果
    return checkCode === calculatedCode;
}

export default validateIdCard;
